package jus.aoo.lisp;

public class Symbole extends Atome {

	public static final Sexpr T = new Symbole("VRAI");
	
	/**
	 * 
	 * invariant : chaine ne contient pas les caracteres ''','(',')' et ' '
	 */
	private String chaine;
	
	Symbole(String symb) {
		chaine = symb;
	}
	
	public String getChaine() {
		return chaine;
	}

	
	@Override
	public String toString() {
		return chaine;
	}
	@Override
	public String toStringTest() {
		return chaine;
	}

	@Override
	public Sexpr eval() throws LispException{
		Sexpr res= Contexte.tableau.get(chaine);
		if (res==null){			
			throw new LispException("Erreur symbole");
		}
		return res;
	}

	@Override
	public boolean isListe() {
		return false;
	}

	@Override
	public boolean isEqualStruct(Sexpr s) {
		return s instanceof Symbole;
	}

	@Override
	public Sexpr car() throws LispException {
		throw new LispException("Peut pas avoir de car");
	}



	@Override
	public Sexpr cdr() throws LispException {
		throw new LispException("pas de cdr");
	}

	@Override
	public boolean eq(Sexpr s) {
		boolean a = s instanceof Symbole;
		return a && chaine.equals(((Symbole)s).getChaine());
	}

	@Override
	public boolean isPrimitive() {
		return false;
	}

	@Override
	public boolean isNil() {
		return false;
	}

	@Override
	public boolean isSymbole() {
		return true;
	}
	

}
